/*******************************************************
> Copyright (C) 2024 ==IOT== All rights reserved.
> File Name: 1.c
> Author: wyf
> Website:www.lv1.org
> Created Time: 2024年08月06日 星期二 16时02分01秒
***************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <assert.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <math.h>
#include <signal.h>
//函数声明

double ca_tan(double sin,double cos);
double ca_cos(double arg);
double ca_sin(double arg);
void test_SIGINT(int signal);
void test_SIGUSR1(int signal);
void test_SIGALRM(int signal);



//全局变量
double arg = 180.0;
int flag = 0;
int main(int argc, const char* argv[])
{
	pid_t pid = 0;
	printf("pid:%d\n",getpid());
	double sin = 0;
	double cos = 0;
	double result = 0;
	

	alarm(5);//这是配合test_SIGALRM信号使用,这里是首次激活
	//玩转信号
	signal(SIGINT,test_SIGINT);//收到停止信号，打扫后续工作
	signal(SIGUSR1,test_SIGUSR1);//收到用户自己信号，执行命令
	signal(SIGALRM,test_SIGALRM);//收到倒计时的时间信号，再执行


	//定义函数指针
	typedef double (*fun)(double);
    fun  p = NULL;
	
	p = ca_sin;
	sin = (*p)(arg);
	
	p = ca_cos;
	cos = (*p)(arg);

	//结果
	result = ca_tan(sin,cos);
	while(flag == 0)
	{
	printf("tan的结果是：%.2lf\n",result);
	sleep(1);
	}
    return 0;
}

//测试SIGINT信号,参数传的是信号
void test_SIGINT(int signal){
	printf("我已完成打扫工作！\n");
	flag = 1;
}
//测试SIGUSR1信号,参数传递的是信号
void test_SIGUSR1(int signal){
	printf("我是用户SIGUSR1信号自己的信号！\n");
}
//测试SIGALRM信号，参数传递的是信号
void test_SIGALRM(int signal){
	alarm(5);//这是配合test_SIGALRM信号使用,放在这里可以循环激活时间信号
	printf("这是倒计时信号！\n");

}





























//计算正切
double ca_tan(double sin,double cos){
	//计算正切
	double tan = 0;
	tan = (sin/cos);
	return tan;

}

//计算cos
double ca_cos(double arg){
	double result = 0;
	//计算余弦
	result = cos(arg);
	return result;

}

//计算sin
double ca_sin(double arg)
{	
	double result = 0;
	//计算正弦
	result = sin(arg);
	return result;
}
